package com.itheima.web.servlet;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;


/**
 * request 和 response 对象
 * 请求的过程：
 *      tomcat 先根据请求的 url 来找到对应的Servlet实现类 创建这个类的对象
 *      接着 tomcat 创建request 和 response 对象，request封装了请求消息的数据 ， response封装了响应消息的数据
 *      然后调用 service 方法 将这两个参数传进去
 *      程序员通过request获取请求消息的数据 通过response响应数据
 *      服务器在给浏览器做出响应前会从response中拿程序员设置的响应数据 再响应
 * request继承体系
 *      ServletRequest --> 继承 HttpServletRequest --> 实现 org.apache.catalina.connector.RequestFacade@aed00b
 *      因此HttpServletRequest最好用
 *
 * request功能：
 *      获取请求消息数据
 *          获取请求行数据
 *          GET /day14/demo4 HTTP/1.1
 *              请求方法 ： String getMethod() GET
 *              获取虚拟目录 ：String getContextPath() /day14
 *              获取Servlet路径：String getServletPath() /demo4
 *              获取GET请求参数：String getQueryString() name=zhangsan&age=18
 *              获取请求 url ：String getRequestURL()
 *              获取协议版本：String getProtocol() HTTP/1.1
 *              获取客户机 ip 地址：String getRemoteAddr()
 *       获取请求头
 *          String getHeader(String name)   通过一个名称来获取请求头的值
 *          Enumeration<String> getHeaderNames()   获取所有的请求头名称
 *       获取请求体数据
 *          步骤
 *              获取流对象
 *                  BufferedReader getReader(): 获取字符输入流 只能获取字符
 *                  BufferedReader getInputStream(): 获取字节输入流 可以获取所有类型的数据 包括文件
 *              从流对象中获取数据
 *
 * 其他功能：
 *  获取参数的通用方法
 *      String getParameter(String name)
 *      String[] getParameterValues(String name)    多用于复选框
 *      Map<String,String[]> getParameterMap()
 *      Enumeration<String> getParameterNames()
 *  请求转发
 *  共享数据
 *  获取ServletContext
 *
 *
 */
@WebServlet("/demo4")
public class ServletDemo4 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        String localAddr = servletRequest.getLocalAddr();
        System.out.println(localAddr);

        System.out.println(servletRequest);
    }

    @Override
    public String getServletInfo() {
        return "";
    }

    @Override
    public void destroy() {

    }
}
